package com.woniuxy.config;
import lombok.AllArgsConstructor;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;

import java.util.ArrayList;
import java.util.List;

@Configuration
@Primary
// 确保覆盖默认的 Swagger 资源提供者
@AllArgsConstructor
public class GatewaySwaggerProvider implements SwaggerResourcesProvider {
    private final DiscoveryClient discoveryClient;
    private final GatewaySwaggerProperties gatewaySwaggerProperties;

    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources = new ArrayList<>();
        // 动态获取所有注册的服务名（排除网关自身）
        discoveryClient.getServices().stream()
                .filter(service -> !service.equals(gatewaySwaggerProperties.getServiceName())) // 排除网关自身
                .forEach(service -> {
                    // 获取分组名称（优先使用映射表，否则使用服务名）
                    String groupName = gatewaySwaggerProperties.getGroupMapping().getOrDefault(service, service);
                    // 为每个服务生成独立的 SwaggerResource，并设置分组名称
                    resources.add(swaggerResource(groupName, "/" + service + "/v2/api-docs"));
                });
        return resources;
    }

    /**
     * 创建 SwaggerResource 对象
     *
     * @param name     分组名称
     * @param location Swagger API 文档路径
     * @return SwaggerResource
     */
    private SwaggerResource swaggerResource(String name, String location) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name); // 设置分组名称
        swaggerResource.setLocation(location); // 设置 Swagger API 文档路径
        swaggerResource.setSwaggerVersion("2.0"); // 设置 Swagger 版本
        return swaggerResource;
    }
}